package com.example.dakotanews.service;

import com.example.dakotanews.dto.utils.ApiResponse;
import org.springframework.stereotype.Service;

@Service
public interface UserService {
    /**
     * @description 根据用户名和密码进行登录时的验证并将用户信息包装成统一响应体返回
     * @param username 用户名
     * @param password 密码
     * @return 包含JWT的简单用户信息
     */
    ApiResponse<Object> loginAuthentication(String username, String password);

    /**
     * @description 用户关注
     * @param followedUserId 被关注的用户ID
     * @param userId 执行关注操作的用户ID
     * @return 返回操作处理结果
     */
    ApiResponse<Object> userFollow(Integer followedUserId, Integer userId);

    /**
     * @description 根据被访问用户ID查询对应的用户基本信息，经包装后返回
     * @param visitedUserId 被访问用户ID
     * @param userId 访客用户ID
     * @return 返回用户基本信息DTO
     */
    ApiResponse<Object> getUserBasicInfo(Integer visitedUserId, Integer userId);

    /**
     * @description 获取用户（自己）属性信息
     * @param visitedUserId 被访问的用户ID（当前登录用户ID）
     * @return 由多种用户属性信息DTO封装的数据
     */
    ApiResponse<Object> getSelfPropertyInfo(Integer visitedUserId);

    /**
     * @description 获取用户（其他用户）属性信息
     * @param visitedUserId 被访问的用户ID
     * @return 由多种用户属性信息DTO封装的数据
     */
    ApiResponse<Object> getOtherPropertyInfo(Integer visitedUserId);
}
